日本語の文字化けの種類と特徴 #文字コード 您所在的位置:网站首页 VW Link使用怎么样 日本語の文字化けの種類と特徴 #文字コード

日本語の文字化けの種類と特徴 #文字コード

2024-06-26 14:03| 来源: 网络整理| 查看: 265

以下、コマンドはすべてUTF-8環境下で実行するものとします。

UTF-8文字列をISO-8859-1(Latin-1)として解釈したケース $ echo 典型的な漢字とEIJIとÉÏJÌの文字化けの種類と特徴 | iconv -f ISO-8859-1 å ¸åç ãªæ¼¢å­ã¨EIJIã¨Ã ÃJÃã®æå­åãã®ç¨®é¡¨ç ¹å¾´

この実行コマンドのように、UTF-8文字列をiconvで受け取るときに-f ISO-8859-1と指定すると、入力(UTF-8)を無理矢理ISO-8859-1と解釈して取り込み、それをUTF-8にして出力します。

UTF-8ではASCII以外は全部MSB=1のバイトなので、æ とか å とか ã とかのISO-8859-1 right-hand sideに相当する文字ばかりに化けます。

端末に直接出力すると、80 から 9f の文字コードはC1制御文字として解釈されるために行や列の移動が起きて、一見不規則な位置に表示されることがあります。単なる文字列に変換するときには、それらは無視されたり表示不能文字の記号に変換されることが多いでしょう。

類似で、ISO-8859-1のスーパーセットのWindows-1252(CP1252)として解釈したケースも似た感じになりますが、C1制御文字がなく図形が割り当てられているので、記号類が出現しやすくなります。Windows-1252には 81 など未定義のコードがあるので、iconvに-cを付けています。

$ echo 典型的な漢字とEIJIとÉÏJÌの文字化けの種類と特徴 | iconv -c -f Windows-1252 典型的ãªæ¼¢å­—ã¨EIJIã¨Ã‰ÃJÃŒã®æ–‡å­—化ã‘ã®ç¨®é¡žã¨ç‰¹å¾´

いずれも、言語といえば欧米系ラテン文字のものしかないという認識の欧米圏発祥のシステムを国際化したが、UTF-8に対応しきれていないときに、よく表れる症状です。Safariがらみで見ることが多いのではないでしょうか。

UTF-8文字列をShift_JISとして解釈したケース $ echo 典型的な漢字とEIJIとÉÏJÌの文字化けの種類と特徴 | iconv -c -f Shift_JIS 蜈ク蝙狗噪縺ェ貍「蟄励→EIJI縺ィテ嘉繍テ後譁ュ怜喧縺代遞ョ鬘槭→迚ケ蠕エ

UTF-8にはShift_JISに含まれないシーケンスがありうるので、iconvに-cを付けています。

日本語での使用頻度の少ないまたは使わないであろう漢字と半角カタカナ等が交互に並んだような特徴的な文字化けになります。

ひらがなとカタカナはUTF-8で e3 81 xx, e3 82 xx, e3 83 xx というバイト列になるので、一般的な漢字仮名まじり文が文字化けすると、Shift_JIS e3 81 = 縺, e3 82 = 繧, e3 83 = 繝 が頻出します。

(特にWindows用の)日本語対応システムを国際化したが、UTF-8に対応しきれていないときに、よく表れる症状です。BOMなしUTF-8のCSVをWindows版Excelで開いたときに誰もが見るやつです。また、以前はMac等で作成したZIPをWindowsで展開したときにファイル名がこのように化けました(今は対応済み)。そのほか、日本語といえばShift_JISでしょみたいな認識のシステムで発生します。

Shift_JIS文字列をIBM866として解釈したケース $ echo 典型的な漢字とEIJIの文字化けの種類と特徴 | iconv -t Shift_JIS | iconv -f IBM866 УTМ^УIВ╚К┐ОЪВ╞EIJIВ╠Х╢ОЪЙ╗ВпВ╠ОэЧ▐В╞У┴Те

以下、日本語専用エンコーディングでは É や Ï は表記できないので入力から除外します。

IBM866(CP866)はロシアのDOSで利用されている(た?)キリル文字を含むコードページです。未定義のバイトはないので-cは必要ありません。

見たとおり、キリル文字と罫線素片が交ざった特徴的な文字化けになります。

なぜIBM866として解釈するケースがあるのかと思われるかもしれません。実は、Linuxの標準的なディストリビューションに付属しているunzip 6.0改は、ファイル名がローカルエンコーディングのUTF-8で解釈できないときにOEM用(つまりWindows用)のアーカイブエンコーディングにフォールバックしますが、それがなぜか-Oで上書きしない限りCP866と定義されているのです。

というわけで、日本語WindowsでZIP圧縮ファイルを作成し(ファイル名はShift_JISでエンコードされる)、-OをつけずにLinux上でunzipしてしまったとき、展開したディレクトリ名・ファイル名にこの文字化けが発生します。

ISO-2022-JP文字列でESCが脱落したケース $ echo 典型的な漢字とEIJIの文字化けの種類と特徴 | iconv -t ISO-2022-JP | tr -d '\033' $BE57?E*$J4A;z$H(BEIJI$B$NJ8;z2=$1$N


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有